资源管理

Kanzi 中,资源是您可以在应用程序的不同部分重用的项。例如,网格数据 (Mesh Data) 资源定义一个模型 (Model) 节点的几何形状,且您可以在不同的节点中使用相同的颜色笔刷 (Color Brush) 笔刷来设置前景笔刷 (Foreground Brush)背景笔刷 (Background Brush) 属性。 Kanzi 资源管理器可让您组织和重复使用应用程序中的资源。

为节点设置资源

Kanzi 中,您可以通过直接使用资源 URL 或间接使用资源键为节点设置资源。在 Kanzi Studio 中设置资源时,默认会使用 URL 分配所有资源。如果您想要使用 Kanzi Studio 中的间接设置,您需要在资源字典中为资源创建一个键,并在属性中选择键。键查找功能是分层级的,因此您可以在树结构中创建资源字典条目,以定义键要解析的对象。

使用资源键设置资源,您可以:

您可以分享资源以降低应用程序对内存和运行时的要求。从而重复使用相同的资源,或者更改资源并在整个应用程序中体现所作更改。例如,您可以方式分享已动画化的笔刷。

Kanzi 提供了很多用于在应用程序运行时管理资源的工具。在 Kanzi 中您可以:

Kanzi 资源类型

Kanzi 资源 文档 (Documentation)
别名 (Aliases)。使用别名 (Alias) 实现对 Kanzi 节点的一致访问。您可以使用别名在 Kanzi StudioKanzi Engine API 或脚本中访问节点。 使用别名

动画剪辑 (Animation Clip) 。 使用动画剪辑 (Animation Clip)动画数据 (Animation Data) 资源组合成更复杂的动画。您可以在不同的动画剪辑 (Animation Clip) 项中重复使用相同的 动画数据 (Animation Data) 资源。使用动画子剪辑 (Animation Child Clip) 创建层级动画。

动画数据 (Animation Data)。使用动画数据 (Animation Data) 资源定义关键帧动画的关键帧和目标属性。一个动画数据 (Animation Data) 资源只能定向到一个属性或属性特性。动画数据 (Animation Data) 资源独立于它们的目标节点。因此,您可以重复使用动画数据 (Animation Data) 资源来动画化不同的节点。

时间线序列 (Timeline Sequence)。使用时间线序列 (Timeline Sequence) 可以组合一组时间线条目 (Timeline Entry) 资源。

动画

编辑动画剪辑

编辑时间线序列

笔刷 (Brushes)。笔刷可用于设置 2D 节点的背景。在 Kanzi 中,所有 2D 节点均默认具有透明背景。

字体 (Fonts)。使用字体渲染文本。

使用笔刷

导入字体

材质 (Materials)。材质可用于设置模型 (Model) 节点和材质笔刷 (Material Brush) 笔刷的外观。

网格数据 (Mesh Data)。网格是顶点、边和面的集合,以平面和直边以及形成点之间的面的三角形定义 3D 立体对象的形状。

纹理 (Textures)。纹理可用于显示图像 (Image) 节点中的内容、设置纹理材质的外观,以及显示纹理笔刷 (Texture Brush) 笔刷中的内容。您可以从常见的图像文件格式创建纹理。

材质类型和材质

使用网格

纹理

渲染通道 (Render Passes)。使用渲染通道来定义 Kanzi 应用程序中节点的渲染。

对象源 (Object Source)。对象源和过滤器可用于告诉绘图对象渲染通道 (Draw Objects Render Pass) 您要渲染 Kanzi 应用程序中的哪些节点。根对象源 (Root Object Source) 含有当前活动的场景 (Scene) 节点的场景图中的所有节点。

渲染

使用对象源

资源字典 (Resource Dictionary)。资源字典是每个资源键值对条目的集合。 资源
脚本 (Scripts)。在 Kanzi Studio 中就可以使用 JavaScript 脚本编程应用程序的逻辑和外观。 使用脚本
状态机 (State Managers)。使用状态机 (State Manager)Kanzi 应用程序中创建不同的状态。 状态机
样式 (Styles)。样式可用于设置一个或多个特定类型节点的属性值。 使用样式
文本资源 (Text Resources)。文本资源是一个供 2D 文本块 (Text Block 2D)3D 文本块 (Text Block 3D) 节点使用的文本字符串。 使用文本块 (Text Block) 节点
轨迹 (Trajectories)。轨迹可用作路径,3D 轨迹布局 (Trajectory Layout 3D)2D 轨迹布局 (Trajectory Layout 2D) 节点沿其排列子节点,3D 轨迹列表框 (Trajectory List Box 3D) 沿其移动项。 轨迹

将资源资产导入到工程中

您可以在 Kanzi Studio 中直接创建一些资源(例如,笔刷和动画)。对于某些资源,您必须导入在第三方工具中创建的资产(例如纹理和网格)。请参阅导入

资源 URL

引用资源的最基本方法是 URL。URL 可以引用 kzb 文件中的资源或者设备存储器上的文件。当设置属性中的资源时,您需要提供资源的 URL。您在 Kanzi Studio 中的属性 (Properties)窗口执行该操作时,Kanzi 会自动为您选择的资源设置。当使用 API 或脚本设置资源属性时,您需要手动提供资源 URL。要在您的工程中查找资源 URL,在 Kanzi Studio 中右键点击该资源并选择复制 .kzb URL (Copy .kzb URL)。要引用设备存储器上的文件,请使用 file:/// URL 格式。

当使用 API 时,您可以直接指定资源对象。请注意,接受资源对象通常会提供一个接受类对象的方法过载。例如,要在 图像 (Image) 节点中设置图像,请使用 Image2D::setImage

资源字典

资源字典是每个资源键值对条目的集合。您可以在任何节点中定义资源字典。键可用于间接指定资源:您可以指定一个键,而不是指定一个资源或者一个指向节点的 URL。Kanzi 会动态解析资源,具体方法是查询最近的资源字典,其中的键定义它要解析到哪个资源。当某个键需要解析到某个项中时,解析过程会开始从使用键的节点中检查资源字典:如果节点的字典包含键,节点将使用键,如果节点的字典不包含键,节点会检查其父节点的字典,直到找到键为止。过程会以递归的方式继续,直到到达场景图的根为止。如果节点未找到键,节点将自行决定随后要执行的操作。例如,如果图像 (Image)节点不显示图像,就是一个有效的案例。当找不到资源时,Kanzi 软化地控制故障,但在插件中,将由插件的作者定义随后要执行的操作。

默认资源

Kanzi 附有默认资源,这些资源可以帮助您更快地创建应用程序。例如,当您创建场景 (Scene) 时,Kanzi 会提供默认渲染通道,当您创建2D 文本块 (Text Block 2D)3D 文本块 (Text Block 3D)节点时,Kanzi会提供默认字体。如果您需要自定义默认 Kanzi 资源,则可创建或导入适合您的需求的资源,并使用它们取代 Kanzi 默认资源。

您从 Kanzi Studio 工程创建 kzb 文件时,默认情况下,kzb 文件中会包含默认 Kanzi 资源。

资源管理器

资源管理器用于管理资源的生命周期、加载和卸载。您可以使用 Kanzi API 访问资源管理器,并使用它指定资源的生命周期策略以及移除未使用的资源。为了指定是始终将资源保留在内存中还是在不需要时将它们卸载,您可以指定一项策略。您可以为资源管理器指定一项全局策略,也可以为每个资源逐一指定。如果策略将资源保留在内存中,您可以基于应用程序的逻辑请求执行手动移除。例如,当在应用程序中更改页面 (Page) 节点时,您可以手动移除资源,来为新的页面 (Page) 节点加载大量资源。

资源管理器允许您定义您的 Kanzi 应用程序中的 GPU 资源存储在哪个内存中。例如,要为纹理设置内存类型,在 Kanzi Studio 中点击素材库 (Library) > 材质和纹理 (Materials and Textures) > 纹理 (Textures),选择一个纹理并在属性 (Properties)中设置GPU 内存类型 (GPU Memory Type)属性:

暂停和恢复

当您的应用程序暂停时,未存储在 kzb 文件中的 GPU 资源将失效。请清除这些资源并在恢复时重建这些资源。确保在重建资源之后指针指向正确的资源。Kanzi 会自动恢复所有其他的资源。

另请参阅

资源

使用资源字典

设置 Kanzi Engine 如何处理未使用的资源